﻿Imports Capa_de_Acceso_a_Datos

Public Class frmDetalleEntrega

    Public idEntrega As Integer
    Public idCronogramaPresentacion As Integer
    Private detalleEntrega As DataTable
    Private obraSocialxPlan As DataTable
    Private idObraSocialxPlan As Integer
    Private año As Integer
    Private mes As Integer
    Private observaciones As String
    Private bandera As Boolean
    Private idDetalleEntrega As Integer
    Private comboAño As DataGridViewComboBoxColumn
    Private comboMes As DataGridViewComboBoxColumn

    Private Sub frmDetalleEntrega_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.Dispose()
    End Sub

    Private Sub frmDetalleEntrega_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        obraSocialxPlan = ObraSocialXPlanDAO.comboObraSocialXPlan
        detalleEntrega = EntregaDAO.obtenerDetalles(idEntrega)

        dgvOSxP.Rows.Clear()

        bandera = False
        CargarCombosGrilla()
        CargarPlanesOS()

    End Sub

    Private Sub CargarPlanesOS()
        For i As Integer = 0 To obraSocialxPlan.Rows.Count - 1
            'Insertamos en la fila 'i' los campos Check - OSXPId - OSXPDescripcion
            dgvOSxP.Rows.Insert(i, False, obraSocialxPlan.Rows(i)("ObraSocialXPlanId"), obraSocialxPlan.Rows(i)("Descripcion"))
            dgvOSxP.Rows(i).Cells("DetalleEntregaAno").Value = Today.Year
            dgvOSxP.Rows(i).Cells("DetalleEntregaMes").Value = Today.Month

            'Recorremos los detalles de la entrega verificando si alguno de ellos ya esta incluído
            For j = 0 To detalleEntrega.Rows.Count - 1

                If obraSocialxPlan.Rows(i)("Descripcion") = detalleEntrega.Rows(j)("Descripcion").ToString() Then
                    'Si está incluído en el detalle lo checkeamos y cargamos sus datos
                    dgvOSxP.Rows(i).Cells("DetalleEntregaCheck").Value = True
                    dgvOSxP.Rows(i).Cells("DetalleEntregaAno").Value = detalleEntrega.Rows(j)("DetalleEntregaAno").ToString()
                    dgvOSxP.Rows(i).Cells("DetalleEntregaMes").Value = detalleEntrega.Rows(j)("MesId")
                    dgvOSxP.Rows(i).Cells("DetalleEntregaObservaciones").Value = detalleEntrega.Rows(j)("DetalleEntregaObservaciones")

                    'Si encontramos algún detalle de entrega cargado significa que es una actualización
                    bandera = True
                End If
            Next
        Next
        If bandera = False Then
            btnGuardar.Enabled = True
            btnModificar.Enabled = False
        Else
            btnGuardar.Enabled = False
            btnModificar.Enabled = True
        End If

    End Sub

    Private Sub CargarCombosGrilla()

        comboAño = dgvOSxP.Columns("DetalleEntregaAno")
        comboAño.DataSource = Constante.obtenerAnos
        comboAño.ValueMember = "AnoId"
        comboAño.DisplayMember = "Ano"

        comboMes = dgvOSxP.Columns("DetalleEntregaMes")
        comboMes.DataSource = MesDAO.obtenerMeses(0)
        comboMes.ValueMember = "MesId"
        comboMes.DisplayMember = "MesNombre"

    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        If validarDetallesEntrega() Then
            guardarDetallesEntrega()
            MsgBox("El Detalle de la Entrega ha sido registrado con éxito", MsgBoxStyle.Information, "Atención")
            Me.Close()
        End If
    End Sub

    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click
        'Eliminamos todos los detalles de entrega que tiene cargada la entrega
        eliminarDetallesEntregas()
        If validarDetallesEntrega() Then
            'Ahora guardamos todos los detalles de entrega seleccionados
            guardarDetallesEntrega()

            MsgBox("El Detalle de la Entrega ha sido actualizado con éxito", MsgBoxStyle.Information, "Atención")
            Me.Close()
        End If
    End Sub

    Private Sub eliminarDetallesEntregas()
        For Each fila As DataRow In detalleEntrega.Rows
            DetalleEntregaDAO.eliminarDetalleEntrega(fila("DetalleEntregaId"))
        Next
    End Sub

    Private Sub guardarDetallesEntrega()
        'For i As Integer = 0 To obraSocialxPlan.Rows.Count - 1
        For Each filaGrilla As DataGridViewRow In dgvOSxP.Rows
            'If dgvOSxP.Rows(i).Cells("DetalleEntregaCheck").Value = True Then
            If filaGrilla.Cells("DetalleEntregaCheck").Value = True Then
                idObraSocialxPlan = CInt(filaGrilla.Cells("ObraSocialxPlanId").Value)

                año = filaGrilla.Cells("DetalleEntregaAno").Value.ToString()
                mes = filaGrilla.Cells("DetalleEntregaMes").Value
                observaciones = filaGrilla.Cells("DetalleEntregaObservaciones").Value

                DetalleEntregaDAO.insertarDetalleEntrega(idEntrega, idObraSocialxPlan, observaciones, idCronogramaPresentacion, año, mes)

            End If

        Next
    End Sub

    Private Sub dgvOSxP_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles dgvOSxP.DataError
        'No hacer nada, simplemente controla las excepciones que se tiran al mostrar la grilla si las hay
    End Sub

    Private Function validarDetallesEntrega() As Boolean
        'Validamos si alguno de los detalles de entrega seleccionados ya está cargado en otra entrega de este cronograma
        For Each fila As DataGridViewRow In dgvOSxP.Rows
            'Si ya existe un detalle para el cronograma con la OSXP, el año y mes seleccionado
            If fila.Cells("DetalleEntregaCheck").Value And DetalleEntregaDAO.existeDetallesEntregas(fila.Cells("ObraSocialXPlanId").Value, idCronogramaPresentacion, fila.Cells("DetalleEntregaAno").Value, fila.Cells("DetalleEntregaMes").Value) Then
                MsgBox("Ya existe un detalle de entrega de la Obra Social " & fila.Cells("OSXPDescripcion").Value & " para el año " & fila.Cells("DetalleEntregaAno").Value & " y mes " & fila.Cells("DetalleEntregaMes").Value & " en el cronograma seleccionado.", MsgBoxStyle.OkOnly, "Error")
                Return False
            End If
        Next

        Return True
    End Function

End Class
